=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\=/=\
%esp@ __Small_OpenVMS_hackerz_guide__ @eax%
Сегодня херовый день, завтра начнётся учёба и о хакинге придётся забыть на
неделю. Вот и решил я написать небольшой гайд по openvms. О ней были доки и в
x25zine, и в nightfall. Но как-то там всё кратко. Этот гайд расчитан именно на
начинающих vms-хакеров коим являюсь и я )
[000001] small overview[000010] processes[000011] network[000100] file system[000101] mnemonics[000111] this is the end[001000] links$! ---------------------------- small overview ----------------------------
Итак, сперва как выглядит вход в систему:
- мы логинемся через tcp/ip\decnet\dialup\x.25\what_ever
- система читает из корня (дира [000000]) диру USERNAME.DIR;1
- далее если мы ввели правлиьный пароль нас пускают в систему
- запускается login.com (по аналогии с .bashrc)
Вот примерчик:
$!
$! This is a sample LOGIN.COM file. 04-02-1991
$! every command in this file gets executed once everytime
$! you login to the system.
$!
$! create a symbol to return us to our login directory
$!
$ home :== set def sys$login
$!
$! Set up the EDT editor and MAIL to use my EDTINI file
$!
$ assign/nolog sys$login:edtini.edt edtini
$ edit :== edit/edt/command = sys$login:edtini.edt
$ mail :== mail/edit = (send,reply,forward)
$ assign/nolog public:mail$keydef.ini mail$init
$!
$! create a short form for a long EMAIL address
$!
$! assign/nolog "in""remote_username@remote_node""" joe
$!
$! Set a more descriptive process name
$!
$! set proc/name = "J. Q. Public"
$ exit
Вот и пример DCL синтаксиса. Кстати, DCL == "Digital command language". Как
нетрудно догадаться, символ '!' в начале строки означает что это коментарий. DCL
оказался довольно гибким языком. Ещё пример:
$ PRINT/COPIES = 5 GROCERY.LIS
'PRINT' - комманда
'/COPIES' - квантификатор ака параметр. Передаётся через '/'. В данном случае
количество печатаемых копий
' = 5 ' - значение параметра
'GROCERY.LIS' - непосредственно аргумент команды print- имя файла.
Ещё нужно добавить, что шелл (ака dcl-интерпретатор) не чуствителен к регистру.
Вот небольшой список команд :
:= = @ ACCOUNTING ALLOCATE ANALYZE APPEND
ASSIGN ATTACH AUTHORIZE AUTOGEN BACKUP BASIC CALL
CANCEL CC CLOSE COBOL CONNECT CONTINUE CONVERT
COPY CREATE CXX DEALLOCATE DEASSIGN DEBUG DECK
DECthreads DEFINE DEFRAGMENT DELETE DEPOSIT DIAGNOSE
DIFFERENCES DIRECTORY DISABLE DISCONNECT DISMOUNT
Documentation DPML DSR DSTGRAPH DUMP EDIT
ENABLE ENDSUBROUTINE EOD EOJ Errors EXAMINE
EXCHANGE EXIT F90 FDL FLOWGRAPH FONT FORTRAN
GENCAT GOSUB GOTO HELP Hints ICONV IF
INITIALIZE INQUIRE INSTALL Instructions JOB LATCP
Lexicals LIBRARY LICENSE Line_editing LINK LMCP
LOCALE LOGIN LOGOUT LYNX MACRO MAIL MERGE
MESSAGE MINITAB Monitor MOUNT NCP NCS ON
OPEN PASCAL PASSWORD PATCH PHONE PMDF PRINT
PRODUCT PSWRAP PURGE Queues READ RECALL RECOVER
RENAME REPLY REQUEST RETURN RMS RTL_Routines
RUN RUNOFF SAS SEARCH SET SHOW SORT
SPAWN Specify START STOP SUBMIT SUBROUTINE SWXCR
Symbol_Assign SYNCHRONIZE SYSGEN SYSMAN
System_Files System_Services TFF TSM TYPE
UNLOCK V62_Features VEST VIEW WAIT WRITE
Additional help libraries available (type @name for topics):
MULTINET
Нет смысла рассказывать о них когда существует `HELP`. А вот про MULTINET стоит
уточнить. Вообще, vms'ки рассчитаны на два типа сетей - decnet и tcp/ip. Другие,
например x.25 сети, тоже поддерживаются но dec или tcp - default. Дык вот, этот
самый MULTINET это пакет утилит для работы с сетями tcp/ip.
$ help multinet
MULTINET
MULTINET is a set of commands for maintaining the MultiNet
network.
Format
MULTINET operation
Additional information available:
Parameters Books CHECK CONFIGURE DECODE FINGER FONT
FTP HOST_TABLE KERBEROS LOAD Logical_Names LPRM
NETCONTROL NETWARE NFSDISMOUNT NFSMOUNT NSLOOKUP PING
PROFILE RCP RFC_Info RDATE REMIND RLOGIN RMTALLOC
RSHELL RUSERS RWALL SEND SET SHOW SKEY
SNMP_Info TALK TCPDUMP TCPVIEW TELNET TFTP TOKEN
TRACEROUTE UNIX_Info WHOIS X11DEBUG Programming
Самое основное есть, это радует ) Да, и на последок: в OpenVMS есть неплохая
замена unix-овой комбинации ctrl-c. Это ctrl-y ;)
$! ------------------------------- processes -------------------------------
При входе в систему каждому пользователю присваивается один процесс. И
соответсвенно, мы светимся в списке пользователей ('$ show users') и в списке
процессов ('$ show system').
Смена имени процесса:
$ set proc/name = "V4xH4xr"
Из списка пользователей можно исчезнуть, если присвоить своему процессу
статус неинтерактивного. Как это сделать я не знаю (( Как раз на середине
написания статьи я потерял доступ к тачке (сетка одного забугорного универа),
так что покопаться не смог толком. Имхо, сделать процесс неинтерактивным можно
поменяв занчение переменной окружения f$mode...
$! ------------------------------- network -------------------------------
С tcp/ip рулиться с помошью multinet'a это просто и не интересно.А вот как юзать
кластеры dec net'a:
$ show network
список нод в данном кластере. А вот как подключиться к ноде:
$ set host node_name_here
Есть ещё две полезных утилиты для общения с другими юзерами : MAIL и PHONE.
Они весьма подробно описаны в хелпе, так что не будем останавливаться.
Помимо логина на удалённую машну, мы можем попробывать смонтировать её диск или
получить файлы с доступных винтов:
$ DIRECTORY PARIS"GREG 8G4FR93A"::WORK2:[PUBLIC]*.*;*
PARIS - имя ноды
Далее ACL (Access Control List):
GREG - использовать аккаунт GREG
8G4FR93A - пароль к аккаунту GREG
WORK2 - диск
PUBLIC - дира.
Кстати, т.к. в acl пароль лежит в открытом виде, то можно попробывать поискать
в доступных скриптах других пользователей - вполне реально найти что-нибудь
интересное.
$! ------------------------------- file system -------------------------------
Вот небольшая схема:
[000000] /* system root */
i
i-[JOE.DIR;1]
i
i-[MIKE.DIR;1]-i-SOMESHIT.TXT;1
i i
... i-[STUPID.DIR;1]--i-DOOM.EXE
i
i-README.TXT
i
...
Примерно такая схема директории - это файлы, в которых перечислены все входящие
в них файлы. В корневой дире лежат директории всех пользователей.
Вот формат имени файла:
node::device:[root.][directory]file-name.file-type;version
node - имя ноды, тоесть можно читать инфу с других машин.
device - диск
[root.] - имя рутовской диры, обязательно с точкой на конце.
[directory] - дира или дыры. i.e. [MIKE.STUPID]
file-name - это надеюсь понятно
file-type - расширение файла
;version - один файл может иметь несколько версий
xmpl:
$ directory [MIKE.STUPID]
DOOM.EXE
README.TXT
Узнать дефолтовую диру и диск можно так:
$ SHOW DEFAULT
а список девайсов и дисков системы можно получить такой командой:
$ SHOW DEVICES
Device Device Error Volume Free Trans Mnt
Name Status Count Label Blocks Count Cnt
DMA2: Mounted 0 BACKUP_FILE 4442 7 1
MTA1: Online 0
весьма предсказуемый синтаксис ;))
DISK2:[GROUP]
Примонтировать к своему процессу можно c помошью команды MOUNT. вот её формат:
MOUNT device-name[:][,...] [volume-label[,...]] [logical-name[:]]
Основные типы файлов:
.CLD Command description file
.COM Command procedure file
.DAT Data file
.DIF Output file created by the DIFFERENCES command
.DIR Directory file
.DIS Distribution list file for the Mail utility
.EDT Startup command file for the EDT editor
.EXE Executable program image file created by the linker
.HLB Help text library file
.HLP Input source file for help libraries
.INI Initialization file
.JOU Journal file created by the EDT editor
.LIS Listing file created by a language compiler or assembler;
default input file for the PRINT and TYPE commands
.LOG Batch job output file
.MAI Mail message file
.MEM Output file created by DIGITAL Standard Runoff (DSR)
.PS POSTSCRIPT format file
.REGIS Regis format file
.RNO Input source file for DIGITAL Standard Runoff (DSR)
.SIX Sixel graphic file
.SYS System image file
.TJL Journal file created by the DECTPU and ACL editors
.TLB Text library file
.TMP Temporary file
.TPU Command file for the EVE editor
.TPU$JOURNAL Journal file created by the EVE editor
.TXT Input file for text libraries or Mail utility output files
Получение инфы о режиме доступа к файлу:
$ SHOW SECURITY 0DAY.TXT
0DAY.TXT object of class FILE
Owner: [GREG]
Protection: (System: RWED, Owner: RWED, Group: RE, World: RW)
Access Control List: <empty>
Группы пользователей при организации доступа к файлам:
system - всякие супервизоры, etc
owner - владелец
group - группа
world - все остальные
Режимы:
R - read
W - write
E - exec
D - delete
Формат Access Control List записи:
NODE"username password"::disk:[directory]filename.filetype
ACL необходимы для ограничения доступа к файлам через сеть (g02 раздел 'network'
этого дока).
$! ------------------------------- sys mnemonics -------------------------------
Системные мнемоники:
sys$login - дира, в которую мы попадаем после логина
sys$system - дира, которая прописана по дефолту нашей стартовой
sys$output - типа stdout ;)
f$directory - aka `pwd`
f$environment - aka `printenv`
f$environment{"prompt"} - ака $PS1 в sh
f$getjpi - инфа о аккаунте, процесс, etc
f$mode - интерактивный или неинтерактивный процесс
f$privelege - инфа о привелегиях данного пользователя
f$process - имя процесса пользователя
f$setprv - set privelege
f$user - aka getuid(). Только в вмсках UIC - User Ident Code
f$getsyi - получить инфу о данной ноде
f$pid - process id
f$time - aka `date`
f$device - инфа о девайсах
f$getdvi - инфа о конкретном девайсе
f$search - искать файл в дире
f$file_attributes - получить атрибуты данного файла
Примерчик из "OpenVMS users guide" (частичным конспектом которого является и эта
статья )):
$ NODE = F$GETSYI("NODENAME")
$ SET PROMPT = "''NODE'$ "
$! ------------------------------ this is the end ------------------------------
Надеюсь эта статья дополнит ваше представление о vms, сложившееся после чтения
nightfall/x25zine(естественно если вы с ней не работали лично). C ya!
$! --------------------------------- links -------------------------------------
[1] http://www2.hmc.edu/www_common/ovms073/index.html[ Prev Page | Goto Content | Next Page ]